#!/usr/bin/env node

const { Command } = require('commander');
const packageJson = require('./package.json');
const path = require('path');

// 导入分析相关模块
const VueFileAnalyzer = require('./src/analyzers/vueFileAnalyzer');
const TreeGenerator = require('./src/generators/treeGenerator');
const Logger = require('./src/utils/logger');
const { handleIconifyCommand } = require('./src/commands/iconify');
const ora = require('ora').default || require('ora');

const program = new Command();

program
  .name('vue-helper')
  .description('Vue.js 开发助手命令行工具')
  .version(packageJson.version);

// 创建组件命令
program
  .command('create <component-name>')
  .description('创建新的 Vue 组件')
  .option('-t, --type <type>', '组件类型 (component|page|layout)', 'component')
  .option('-d, --dir <directory>', '输出目录', 'src/components')
  .option('--typescript', '使用 TypeScript')
  .action((name, options) => {
    console.log(`创建组件: ${name}`);
    console.log(`类型: ${options.type}`);
    console.log(`目录: ${options.dir}`);
    console.log(`TypeScript: ${options.typescript ? '是' : '否'}`);
    // TODO: 实现组件创建逻辑
  });

// 代码生成命令
program
  .command('generate <type>')
  .alias('g')
  .description('生成代码模板')
  .argument('[name]', '生成项的名称')
  .option('-s, --styled', '包含样式文件')
  .option('-t, --test', '包含测试文件')
  .action((type, name, options) => {
    console.log(`生成类型: ${type}`);
    if (name) console.log(`名称: ${name}`);
    console.log(`包含样式: ${options.styled ? '是' : '否'}`);
    console.log(`包含测试: ${options.test ? '是' : '否'}`);
    // TODO: 实现代码生成逻辑
  });

// Iconify 图标分析命令
program
  .command('iconify [directory]')
  .description('分析 Vue 项目中的 Iconify 图标使用情况')
  .option('-f, --format <format>', '输出格式 (js|ts|json|imports-only)', 'js')
  .option('-o, --output <name>', '输出文件名', 'iconify')
  .option('--output-dir <dir>', '输出目录', 'data')
  .option('-r, --recursive', '递归扫描子目录', true)
  .option('--types', '生成 TypeScript 类型定义', true)
  .option('--stats', '生成统计报告', true)
  .option('--esm', '生成 ESM 格式文件', true)
  .option('--minify', '压缩输出文件', false)
  .action(async (directory = '.', options) => {
    await handleIconifyCommand(directory, options);
  });

// 项目分析命令
program
  .command('analyze [directory]')
  .description('分析 Vue 项目结构并生成报告')
  .option('-f, --format <format>', '输出格式 (tree|json)', 'tree')
  .option('-o, --output <file>', '输出到文件 (默认: tree.md，生成于分析目录)', 'tree.md')
  .option('-r, --recursive', '递归扫描子目录', true)
  .option('--detailed', '详细分析模式', false)
  .action(async (directory = '.', options) => {
    const spinner = ora('正在分析 Vue 文件...').start();

    try {
      // 解析目录路径
      const targetDir = path.resolve(directory);

      // 创建分析器和生成器
      const analyzer = new VueFileAnalyzer();
      const generator = new TreeGenerator();

      // 执行分析
      spinner.text = `正在扫描目录: ${targetDir}`;
      const analysisData = await analyzer.analyzeDirectory(targetDir, {
        recursive: options.recursive,
        detailed: options.detailed
      });

      if (analysisData.files.length === 0) {
        spinner.warn('未找到任何 .vue 文件');
        return;
      }

      // 生成报告
      spinner.text = '正在生成分析报告...';
      const report = generator.generate(analysisData, {
        format: options.format
      });

      // 输出到文件 - 直接生成在被分析目录中
      const outputPath = path.join(targetDir, options.output);
      await generator.saveToFile(report, outputPath);

      spinner.succeed(`分析完成！报告已保存到: ${outputPath}`);

      // 显示简要统计
      Logger.info(`共分析 ${analysisData.stats.totalFiles} 个文件，总计 ${analysisData.stats.totalLines} 行代码`);

      if (analysisData.stats.errors.length > 0) {
        Logger.warning(`发现 ${analysisData.stats.errors.length} 个解析错误`);
      }

    } catch (error) {
      spinner.fail(`分析失败: ${error.message}`);
      process.exit(1);
    }
  });

// 配置命令
program
  .command('config')
  .description('查看或设置配置')
  .option('-g, --global', '全局配置')
  .option('-l, --list', '列出所有配置')
  .option('-s, --set <key=value>', '设置配置项')
  .action((options) => {
    if (options.list) {
      console.log('当前配置:');
      // TODO: 实现配置列表显示
    } else if (options.set) {
      console.log(`设置配置: ${options.set}`);
      // TODO: 实现配置设置逻辑
    } else {
      console.log('配置管理');
    }
  });

program.parse();